/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.general.util.FormatoExportacion;
import org.cip.esymons.general.util.Reporteador;
import org.cip.esymons.tesoreria.adapters.AporteXCajaMutual;
import org.cip.esymons.tesoreria.adapters.AporteXCajaMutualyConsejoNacional;
import org.cip.esymons.tesoreria.adapters.AporteXConsejoNacional;
import org.cip.esymons.tesoreria.bc.MovimientoCuentaDelegate;

/**
 *
 * @author Ingrid
 */
public class ConsejoNacionalController {

    private Integer mes;
    private Integer anyo;
    private MovimientoCuentaDelegate delegadoMovimientoCuenta;

    public ConsejoNacionalController() {
        delegadoMovimientoCuenta = new MovimientoCuentaDelegate();
    }

    /**
     * @return the mes
     */
    public Integer getMes() {
        return mes;
    }

    /**
     * @param mes the mes to set
     */
    public void setMes(Integer mes) {
        this.mes = mes;
    }

    /**
     * @return the anyo
     */
    public Integer getAnyo() {
        return anyo;
    }

    /**
     * @param anyo the anyo to set
     */
    public void setAnyo(Integer anyo) {
        this.anyo = anyo;
    }

    //reporte de aportes al consejo nacional
    public String reporteDeConsejoNacional() throws SQLException {
        try {
            Integer numeroTotalColegiados = 0;
            List<String> listaCipNoRepetidos = new ArrayList<String>();
            List<String> listaCips = new ArrayList<String>();
            if (!anyo.equals(0)) {
                if (!mes.equals(0)) {
                    List<AporteXConsejoNacional> listaAportesConsejoNacional = delegadoMovimientoCuenta.aportesColegiadosXConsejoNacional(anyo, mes);
                    if (listaAportesConsejoNacional != null) {
                        if (listaAportesConsejoNacional.size() > 0) {
                            for (int m = 0; m <= listaAportesConsejoNacional.size() - 1; m++) {
                                listaCips.add(listaAportesConsejoNacional.get(m).getNumeroCipAportante());
                            }
                            for (int n = 0; n <= listaCips.size() - 1; n++) {
                                if (!listaCipNoRepetidos.contains(listaCips.get(n))) {
                                    listaCipNoRepetidos.add(listaCips.get(n));
                                }
                            }
                            numeroTotalColegiados = listaCipNoRepetidos.size();
                            Map parametrosCM = new HashMap();
                            Reporteador reporteador = new Reporteador();
                            String tr = ControladorAbstracto.getRequestParameter("tipoReporteConsejo");
                            parametrosCM.put("numeroColegiados", numeroTotalColegiados);
                            if (tr.equals("pdf")) {
                                reporteador.exportarReporte("rptConsejoNacional", FormatoExportacion.pdf, listaAportesConsejoNacional, parametrosCM);
                            } else {
                                reporteador.exportarReporte("rptConsejoNacional", FormatoExportacion.excel, listaAportesConsejoNacional, parametrosCM);
                            }
                        } else {
                            ControladorAbstracto.warn("No existen Aportes Por Consejo Nacional para los datos ingresados");
                        }
                    } else {
                        ControladorAbstracto.warn("No existe Reporte para los Datos Ingresados");
                    }
                } else {
                    ControladorAbstracto.warn("Seleccione un Mes de Pago para el Reporte");
                }
            } else {
                ControladorAbstracto.warn("Seleccione un Año de Pago para el Reporte");
            }
        } catch (Exception e) {
            ControladorAbstracto.warn("No existen Aportes Por Consejo Nacional para los datos ingresados");
        }
        return null;
    }

    //reporte de aportes al consejo nacional
    public String reporteDeConsejoNacionalyCajaMutual() throws SQLException {
        try {
            Integer numeroTotalColegiados = 0;
            List<String> listaCipNoRepetidos = new ArrayList<String>();
            List<String> listaCips = new ArrayList<String>();
            if (!anyo.equals(0)) {
                if (!mes.equals(0)) {
                    List<AporteXConsejoNacional> listaAportesConsejoNacional = delegadoMovimientoCuenta.aportesColegiadosXConsejoNacional(anyo, mes);
                    List<AporteXCajaMutual> listaAportesCajaMutual = delegadoMovimientoCuenta.mostrarAporteColegiadosXCajaMutual(anyo, mes);
                    List<AporteXCajaMutualyConsejoNacional> lista = unirListas(listaAportesConsejoNacional, listaAportesCajaMutual);
                    if (lista != null) {
                        if (lista.size() > 0) {
                            for (int m = 0; m <= lista.size() - 1; m++) {
                                listaCips.add(lista.get(m).getNumeroCipAportante());
                            }
                            for (int n = 0; n <= listaCips.size() - 1; n++) {
                                if (!listaCipNoRepetidos.contains(listaCips.get(n))) {
                                    listaCipNoRepetidos.add(listaCips.get(n));
                                }
                            }
                            numeroTotalColegiados = listaCipNoRepetidos.size();
                            Map parametrosCM = new HashMap();
                            Reporteador reporteador = new Reporteador();
                            String tr = ControladorAbstracto.getRequestParameter("tipoReporteConsejo");
                            parametrosCM.put("numeroColegiados", numeroTotalColegiados);
                            if (tr.equals("pdf")) {
                                reporteador.exportarReporte("rptCajaMutualyConsejoNacional", FormatoExportacion.pdf, lista, parametrosCM);
                            } else {
                                reporteador.exportarReporte("rptCajaMutualyConsejoNacional", FormatoExportacion.excel, lista, parametrosCM);
                            }
                        } else {
                            ControladorAbstracto.warn("No existen Aportes Por Consejo Nacional para los datos ingresados");
                        }
                    } else {
                        ControladorAbstracto.warn("No existe Reporte para los Datos Ingresados");
                    }
                } else {
                    ControladorAbstracto.warn("Seleccione un Mes de Pago para el Reporte");
                }
            } else {
                ControladorAbstracto.warn("Seleccione un Año de Pago para el Reporte");
            }
        } catch (Exception e) {
            ControladorAbstracto.warn("No existen Aportes para los datos ingresados");
        }
        return null;
    }

    private List<AporteXCajaMutualyConsejoNacional> unirListas(List<AporteXConsejoNacional> listaCNacional, List<AporteXCajaMutual> listaCMutal) {
        List<AporteXCajaMutualyConsejoNacional> lista = new ArrayList<AporteXCajaMutualyConsejoNacional>();
        try {
            for (AporteXConsejoNacional acn : listaCNacional) {
                AporteXCajaMutualyConsejoNacional acnm = new AporteXCajaMutualyConsejoNacional();
                acnm.setAnioPagoAporte(acn.getAnioPagoAporte());
                acnm.setTipoColegiadoAportante(acn.getTipoColegiadoAportante());
                acnm.setNumeroCipAportante(acn.getNumeroCipAportante());
                acnm.setAporteTotalAnualCN(acn.getAporteTotalAnual());
                acnm.setCapituloColegiadoAportante(acn.getCapituloColegiadoAportante());
                acnm.setNombreColegiadoAportante(acn.getNombreColegiadoAportante());
                acnm.setMontoMesEneAporteCN(acn.getMontoMesEneAporte());
                acnm.setMontoMesFebAporteCN(acn.getMontoMesFebAporte());
                acnm.setMontoMesMarAporteCN(acn.getMontoMesMarAporte());
                acnm.setMontoMesAbrAporteCN(acn.getMontoMesAbrAporte());
                acnm.setMontoMesMayAporteCN(acn.getMontoMesMayAporte());
                acnm.setMontoMesJunAporteCN(acn.getMontoMesJunAporte());
                acnm.setMontoMesJulAporteCN(acn.getMontoMesJulAporte());
                acnm.setMontoMesAgoAporteCN(acn.getMontoMesAgoAporte());
                acnm.setMontoMesSetAporteCN(acn.getMontoMesSetAporte());
                acnm.setMontoMesOctAporteCN(acn.getMontoMesOctAporte());
                acnm.setMontoMesNovAporteCN(acn.getMontoMesNovAporte());
                acnm.setMontoMesDicAporteCN(acn.getMontoMesDicAporte());

                for (AporteXCajaMutual acm : listaCMutal) {
                    if (acm.getNumeroCipAportante().equals(acn.getNumeroCipAportante()) && acm.getAnioPagoAporte().equals(acn.getAnioPagoAporte())) {
                        acnm.setMontoMesEneAporte(acm.getMontoMesEneAporte());
                        acnm.setMontoMesFebAporte(acm.getMontoMesFebAporte());
                        acnm.setMontoMesMarAporte(acm.getMontoMesMarAporte());
                        acnm.setMontoMesAbrAporte(acm.getMontoMesAbrAporte());
                        acnm.setMontoMesMayAporte(acm.getMontoMesMayAporte());
                        acnm.setMontoMesJunAporte(acm.getMontoMesJunAporte());
                        acnm.setMontoMesJulAporte(acm.getMontoMesJulAporte());
                        acnm.setMontoMesAgoAporte(acm.getMontoMesAgoAporte());
                        acnm.setMontoMesSetAporte(acm.getMontoMesSetAporte());
                        acnm.setMontoMesOctAporte(acm.getMontoMesOctAporte());
                        acnm.setMontoMesNovAporte(acm.getMontoMesNovAporte());
                        acnm.setMontoMesDicAporte(acm.getMontoMesDicAporte());
                        acnm.setAporteTotalAnual(acm.getAporteTotalAnual());
                    }
                }
                lista.add(acnm);
            }
            return lista;
        } catch (Exception e) {
            return new ArrayList<AporteXCajaMutualyConsejoNacional>();
        }
    }
}
